<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/capability.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/capability.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/*</span>
<a name="2" /><span class="True">       2:</span> <span class="k"> * This is &lt;linux/capability.h&gt;</span>
<a name="3" /><span class="True">       3:</span> <span class="k"> *</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> * Andrew G. Morgan &lt;morgan@kernel.org&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Alexander Kjeldaas &lt;astor@guardian.no&gt;</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * with help from Aleph1, Roland Buresund and Andrew Main.</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> *</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * See here for the libcap library (&quot;POSIX draft&quot; compliance):</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.6/</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> */</span>
<a name="12" /><span class="Maybe">      12:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0NBUEFCSUxJVFlfSF8w"><span class="b">_LINUX_CAPABILITY_H</span></a>
<a name="13" /><span class="Maybe">      13:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0xJTlVYX0NBUEFCSUxJVFlfSF8w"><span class="b">_LINUX_CAPABILITY_H</span></a>
<a name="14" /><span class="Maybe">      14:</span> 
<a name="15" /><span class="Maybe">      15:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">uapi</span><span class="f">/</span><span class="b">linux</span><span class="f">/</span><span class="b">capability</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="16" /><span class="Maybe">      16:</span> 
<a name="17" /><span class="Maybe">      17:</span> 
<a name="18" /><span class="Maybe">      18:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0tFUk5FTF9DQVBBQklMSVRZX1ZFUlNJT05fMA__"><span class="b">_KERNEL_CAPABILITY_VERSION</span></a> <a href="cpu.c_macros_noref.html#_X0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8zXzA_"><span class="b">_LINUX_CAPABILITY_VERSION_3</span></a>
<a name="19" /><span class="Maybe">      19:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X0tFUk5FTF9DQVBBQklMSVRZX1UzMlNfMA__"><span class="b">_KERNEL_CAPABILITY_U32S</span></a>    <a href="cpu.c_macros_ref.html#_X0xJTlVYX0NBUEFCSUxJVFlfVTMyU18zXzA_"><span class="b">_LINUX_CAPABILITY_U32S_3</span></a>
<a name="20" /><span class="Maybe">      20:</span> 
<a name="21" /><span class="Maybe">      21:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">file_caps_enabled</span><span class="f">;</span>
<a name="22" /><span class="Maybe">      22:</span> 
<a name="23" /><span class="Maybe">      23:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">kernel_cap_struct</span> <span class="f">{</span>
<a name="24" /><span class="Maybe">      24:</span>     <span class="b">__u32</span> <span class="b">cap</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_X0tFUk5FTF9DQVBBQklMSVRZX1UzMlNfMA__"><span class="b">_KERNEL_CAPABILITY_U32S</span></a><span class="f">]</span><span class="f">;</span>
<a name="25" /><span class="Maybe">      25:</span> <span class="f">}</span> <span class="b">kernel_cap_t</span><span class="f">;</span>
<a name="26" /><span class="Maybe">      26:</span> 
<a name="27" /><span class="Maybe">      27:</span> <span class="k">/* exact same as vfs_cap_data but in cpu endian and always filled completely */</span>
<a name="28" /><span class="Maybe">      28:</span> <span class="m">struct</span> <span class="b">cpu_vfs_cap_data</span> <span class="f">{</span>
<a name="29" /><span class="Maybe">      29:</span>     <span class="b">__u32</span> <span class="b">magic_etc</span><span class="f">;</span>
<a name="30" /><span class="Maybe">      30:</span>     <span class="b">kernel_cap_t</span> <span class="b">permitted</span><span class="f">;</span>
<a name="31" /><span class="Maybe">      31:</span>     <span class="b">kernel_cap_t</span> <span class="b">inheritable</span><span class="f">;</span>
<a name="32" /><span class="Maybe">      32:</span> <span class="f">}</span><span class="f">;</span>
<a name="33" /><span class="Maybe">      33:</span> 
<a name="34" /><span class="Maybe">      34:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X1VTRVJfQ0FQX0hFQURFUl9TSVpFXzA_"><span class="b">_USER_CAP_HEADER_SIZE</span></a>  <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="m">struct</span> <span class="b">__user_cap_header_struct</span><span class="f">)</span><span class="f">)</span>
<a name="35" /><span class="Maybe">      35:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0tFUk5FTF9DQVBfVF9TSVpFXzA_"><span class="b">_KERNEL_CAP_T_SIZE</span></a>     <span class="f">(</span><span class="m">sizeof</span><span class="f">(</span><span class="b">kernel_cap_t</span><span class="f">)</span><span class="f">)</span>
<a name="36" /><span class="Maybe">      36:</span> 
<a name="37" /><span class="Maybe">      37:</span> 
<a name="38" /><span class="Maybe">      38:</span> <span class="m">struct</span> <span class="b">file</span><span class="f">;</span>
<a name="39" /><span class="Maybe">      39:</span> <span class="m">struct</span> <span class="b">inode</span><span class="f">;</span>
<a name="40" /><span class="Maybe">      40:</span> <span class="m">struct</span> <span class="b">dentry</span><span class="f">;</span>
<a name="41" /><span class="Maybe">      41:</span> <span class="m">struct</span> <span class="b">user_namespace</span><span class="f">;</span>
<a name="42" /><span class="Maybe">      42:</span> 
<a name="43" /><span class="Maybe">      43:</span> <span class="m">struct</span> <span class="b">user_namespace</span> <span class="f">*</span><a href="cpu.c_macros_noref.html#_Y3VycmVudF91c2VyX25zXzA_"><span class="b">current_user_ns</span></a><span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">;</span>
<a name="44" /><span class="Maybe">      44:</span> 
<a name="45" /><span class="Maybe">      45:</span> <span class="m">extern</span> <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_empty_set</span><span class="f">;</span>
<a name="46" /><span class="Maybe">      46:</span> <span class="m">extern</span> <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_init_eff_set</span><span class="f">;</span>
<a name="47" /><span class="Maybe">      47:</span> 
<a name="48" /><span class="Maybe">      48:</span> <span class="k">/*</span>
<a name="49" /><span class="Maybe">      49:</span> <span class="k"> * Internal kernel functions only</span>
<a name="50" /><span class="Maybe">      50:</span> <span class="k"> */</span>
<a name="51" /><span class="Maybe">      51:</span> 
<a name="52" /><span class="Maybe">      52:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZPUl9FQUNIX1UzMl8w"><span class="b">CAP_FOR_EACH_U32</span></a><span class="f">(</span><span class="b">__capi</span><span class="f">)</span>  \
<a name="53" /><span class="Maybe">      53:</span>     <span class="m">for</span> <span class="f">(</span><span class="b">__capi</span> <span class="f">=</span> <span class="c">0</span><span class="f">;</span> <span class="b">__capi</span> <span class="f">&lt;</span> <a href="cpu.c_macros_ref.html#_X0tFUk5FTF9DQVBBQklMSVRZX1UzMlNfMA__"><span class="b">_KERNEL_CAPABILITY_U32S</span></a><span class="f">;</span> <span class="f">++</span><span class="b">__capi</span><span class="f">)</span>
<a name="54" /><span class="Maybe">      54:</span> 
<a name="55" /><span class="Maybe">      55:</span> <span class="k">/*</span>
<a name="56" /><span class="Maybe">      56:</span> <span class="k"> * CAP_FS_MASK and CAP_NFSD_MASKS:</span>
<a name="57" /><span class="Maybe">      57:</span> <span class="k"> *</span>
<a name="58" /><span class="Maybe">      58:</span> <span class="k"> * The fs mask is all the privileges that fsuid==0 historically meant.</span>
<a name="59" /><span class="Maybe">      59:</span> <span class="k"> * At one time in the past, that included CAP_MKNOD and CAP_LINUX_IMMUTABLE.</span>
<a name="60" /><span class="Maybe">      60:</span> <span class="k"> *</span>
<a name="61" /><span class="Maybe">      61:</span> <span class="k"> * It has never meant setting security.* and trusted.* xattrs.</span>
<a name="62" /><span class="Maybe">      62:</span> <span class="k"> *</span>
<a name="63" /><span class="Maybe">      63:</span> <span class="k"> * We could also define fsmask as follows:</span>
<a name="64" /><span class="Maybe">      64:</span> <span class="k"> *   1. CAP_FS_MASK is the privilege to bypass all fs-related DAC permissions</span>
<a name="65" /><span class="Maybe">      65:</span> <span class="k"> *   2. The security.* and trusted.* xattrs are fs-related MAC permissions</span>
<a name="66" /><span class="Maybe">      66:</span> <span class="k"> */</span>
<a name="67" /><span class="Maybe">      67:</span> 
<a name="68" /><span class="Maybe">      68:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjBfMA__"><span class="b">CAP_FS_MASK_B0</span></a>     <span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0NIT1dOXzA_"><span class="b">CAP_CHOWN</span></a><span class="f">)</span>        \
<a name="69" /><span class="Maybe">      69:</span>                 <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX01LTk9EXzA_"><span class="b">CAP_MKNOD</span></a><span class="f">)</span>        \
<a name="70" /><span class="Maybe">      70:</span>                 <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0RBQ19PVkVSUklERV8w"><span class="b">CAP_DAC_OVERRIDE</span></a><span class="f">)</span>    \
<a name="71" /><span class="Maybe">      71:</span>                 <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0RBQ19SRUFEX1NFQVJDSF8w"><span class="b">CAP_DAC_READ_SEARCH</span></a><span class="f">)</span>    \
<a name="72" /><span class="Maybe">      72:</span>                 <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0ZPV05FUl8w"><span class="b">CAP_FOWNER</span></a><span class="f">)</span>        \
<a name="73" /><span class="Maybe">      73:</span>                 <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0ZTRVRJRF8w"><span class="b">CAP_FSETID</span></a><span class="f">)</span><span class="f">)</span>
<a name="74" /><span class="Maybe">      74:</span> 
<a name="75" /><span class="Maybe">      75:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjFfMA__"><span class="b">CAP_FS_MASK_B1</span></a>     <span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX01BQ19PVkVSUklERV8w"><span class="b">CAP_MAC_OVERRIDE</span></a><span class="f">)</span><span class="f">)</span>
<a name="76" /><span class="Maybe">      76:</span> 
<a name="77" /><span class="False">      77:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_X0tFUk5FTF9DQVBBQklMSVRZX1UzMlNfMA__"><span class="b">_KERNEL_CAPABILITY_U32S</span></a> <span class="f">!=</span> <span class="c">2</span>
<a name="78" /><span class="False">      78:</span> <span class="f">#</span> <span class="n">error</span> <span class="b">Fix</span> <span class="b">up</span> <span class="b">hand</span><span class="f">-</span><span class="b">coded</span> <span class="b">capability</span> <span class="b">macro</span> <span class="b">initializers</span>
<a name="79" /><span class="Maybe">      79:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* HAND-CODED capability initializers */</span>
<a name="80" /><span class="Maybe">      80:</span> 
<a name="81" /><span class="Maybe">      81:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_Q0FQX0VNUFRZX1NFVF8w"><span class="b">CAP_EMPTY_SET</span></a>    <span class="f">(</span><span class="f">(</span><span class="b">kernel_cap_t</span><span class="f">)</span><span class="f">{</span><span class="f">{</span> <span class="c">0</span><span class="f">,</span> <span class="c">0</span> <span class="f">}</span><span class="f">}</span><span class="f">)</span>
<a name="82" /><span class="Maybe">      82:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_Q0FQX0ZVTExfU0VUXzA_"><span class="b">CAP_FULL_SET</span></a>     <span class="f">(</span><span class="f">(</span><span class="b">kernel_cap_t</span><span class="f">)</span><span class="f">{</span><span class="f">{</span> <span class="f">~</span><span class="c">0</span><span class="f">,</span> <span class="f">~</span><span class="c">0</span> <span class="f">}</span><span class="f">}</span><span class="f">)</span>
<a name="83" /><span class="Maybe">      83:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX1NFVF8w"><span class="b">CAP_FS_SET</span></a>       <span class="f">(</span><span class="f">(</span><span class="b">kernel_cap_t</span><span class="f">)</span><span class="f">{</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjBfMA__"><span class="b">CAP_FS_MASK_B0</span></a> \
<a name="84" /><span class="Maybe">      84:</span>                     <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX0xJTlVYX0lNTVVUQUJMRV8w"><span class="b">CAP_LINUX_IMMUTABLE</span></a><span class="f">)</span><span class="f">,</span> \
<a name="85" /><span class="Maybe">      85:</span>                     <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjFfMA__"><span class="b">CAP_FS_MASK_B1</span></a> <span class="f">}</span> <span class="f">}</span><span class="f">)</span>
<a name="86" /><span class="Maybe">      86:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX05GU0RfU0VUXzA_"><span class="b">CAP_NFSD_SET</span></a>     <span class="f">(</span><span class="f">(</span><span class="b">kernel_cap_t</span><span class="f">)</span><span class="f">{</span><span class="f">{</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjBfMA__"><span class="b">CAP_FS_MASK_B0</span></a> \
<a name="87" /><span class="Maybe">      87:</span>                     <span class="f">|</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX1NZU19SRVNPVVJDRV8w"><span class="b">CAP_SYS_RESOURCE</span></a><span class="f">)</span><span class="f">,</span> \
<a name="88" /><span class="Maybe">      88:</span>                     <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX01BU0tfQjFfMA__"><span class="b">CAP_FS_MASK_B1</span></a> <span class="f">}</span> <span class="f">}</span><span class="f">)</span>
<a name="89" /><span class="Maybe">      89:</span> 
<a name="90" /><span class="Maybe">      90:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _KERNEL_CAPABILITY_U32S != 2 */</span>
<a name="91" /><span class="Maybe">      91:</span> 
<a name="92" /><span class="Maybe">      92:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2FwX2NsZWFyXzA_"><span class="b">cap_clear</span></a><span class="f">(</span><span class="b">c</span><span class="f">)</span>         <span class="m">do</span> <span class="f">{</span> <span class="f">(</span><span class="b">c</span><span class="f">)</span> <span class="f">=</span> <span class="b">__cap_empty_set</span><span class="f">;</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="93" /><span class="Maybe">      93:</span> 
<a name="94" /><span class="Maybe">      94:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2FwX3JhaXNlXzA_"><span class="b">cap_raise</span></a><span class="f">(</span><span class="b">c</span><span class="f">,</span> <span class="b">flag</span><span class="f">)</span>  <span class="f">(</span><span class="f">(</span><span class="b">c</span><span class="f">)</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX0lOREVYXzA_"><span class="b">CAP_TO_INDEX</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">]</span> <span class="f">|=</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">)</span>
<a name="95" /><span class="Maybe">      95:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2FwX2xvd2VyXzA_"><span class="b">cap_lower</span></a><span class="f">(</span><span class="b">c</span><span class="f">,</span> <span class="b">flag</span><span class="f">)</span>  <span class="f">(</span><span class="f">(</span><span class="b">c</span><span class="f">)</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX0lOREVYXzA_"><span class="b">CAP_TO_INDEX</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">]</span> <span class="f">&amp;=</span> <span class="f">~</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">)</span>
<a name="96" /><span class="Maybe">      96:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Y2FwX3JhaXNlZF8w"><span class="b">cap_raised</span></a><span class="f">(</span><span class="b">c</span><span class="f">,</span> <span class="b">flag</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">c</span><span class="f">)</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX0lOREVYXzA_"><span class="b">CAP_TO_INDEX</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">]</span> <span class="f">&amp;</span> <a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><span class="b">flag</span><span class="f">)</span><span class="f">)</span>
<a name="97" /><span class="Maybe">      97:</span> 
<a name="98" /><span class="Maybe">      98:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX0JPUF9BTExfMA__"><span class="b">CAP_BOP_ALL</span></a><span class="f">(</span><span class="b">c</span><span class="f">,</span> <span class="b">a</span><span class="f">,</span> <span class="b">b</span><span class="f">,</span> <span class="b">OP</span><span class="f">)</span>                                    \
<a name="99" /><span class="Maybe">      99:</span> <span class="m">do</span> <span class="f">{</span>                                                                \
<a name="100" /><span class="Maybe">     100:</span>     <span class="m">unsigned</span> <span class="b">__capi</span><span class="f">;</span>                                            \
<a name="101" /><span class="Maybe">     101:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0ZPUl9FQUNIX1UzMl8w"><span class="b">CAP_FOR_EACH_U32</span></a><span class="f">(</span><span class="b">__capi</span><span class="f">)</span> <span class="f">{</span>                                  \
<a name="102" /><span class="Maybe">     102:</span>         <span class="b">c</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span> <span class="f">=</span> <span class="b">a</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span> <span class="b">OP</span> <span class="b">b</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span><span class="f">;</span>     \
<a name="103" /><span class="Maybe">     103:</span>     <span class="f">}</span>                                                           \
<a name="104" /><span class="Maybe">     104:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="105" /><span class="Maybe">     105:</span> 
<a name="106" /><span class="Maybe">     106:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Q0FQX1VPUF9BTExfMA__"><span class="b">CAP_UOP_ALL</span></a><span class="f">(</span><span class="b">c</span><span class="f">,</span> <span class="b">a</span><span class="f">,</span> <span class="b">OP</span><span class="f">)</span>                                       \
<a name="107" /><span class="Maybe">     107:</span> <span class="m">do</span> <span class="f">{</span>                                                                \
<a name="108" /><span class="Maybe">     108:</span>     <span class="m">unsigned</span> <span class="b">__capi</span><span class="f">;</span>                                            \
<a name="109" /><span class="Maybe">     109:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0ZPUl9FQUNIX1UzMl8w"><span class="b">CAP_FOR_EACH_U32</span></a><span class="f">(</span><span class="b">__capi</span><span class="f">)</span> <span class="f">{</span>                                  \
<a name="110" /><span class="Maybe">     110:</span>         <span class="b">c</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span> <span class="f">=</span> <span class="b">OP</span> <span class="b">a</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span><span class="f">;</span>                   \
<a name="111" /><span class="Maybe">     111:</span>     <span class="f">}</span>                                                           \
<a name="112" /><span class="Maybe">     112:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="113" /><span class="Maybe">     113:</span> 
<a name="114" /><span class="Maybe">     114:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_combine</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span>
<a name="115" /><span class="Maybe">     115:</span>                        <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">b</span><span class="f">)</span>
<a name="116" /><span class="Maybe">     116:</span> <span class="f">{</span>
<a name="117" /><span class="Maybe">     117:</span>     <span class="b">kernel_cap_t</span> <span class="b">dest</span><span class="f">;</span>
<a name="118" /><span class="Maybe">     118:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0JPUF9BTExfMA__"><span class="b">CAP_BOP_ALL</span></a><span class="f">(</span><span class="b">dest</span><span class="f">,</span> <span class="b">a</span><span class="f">,</span> <span class="b">b</span><span class="f">,</span> <span class="f">|</span><span class="f">)</span><span class="f">;</span>
<a name="119" /><span class="Maybe">     119:</span>     <span class="m">return</span> <span class="b">dest</span><span class="f">;</span>
<a name="120" /><span class="Maybe">     120:</span> <span class="f">}</span>
<a name="121" /><span class="Maybe">     121:</span> 
<a name="122" /><span class="Maybe">     122:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_intersect</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span>
<a name="123" /><span class="Maybe">     123:</span>                      <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">b</span><span class="f">)</span>
<a name="124" /><span class="Maybe">     124:</span> <span class="f">{</span>
<a name="125" /><span class="Maybe">     125:</span>     <span class="b">kernel_cap_t</span> <span class="b">dest</span><span class="f">;</span>
<a name="126" /><span class="Maybe">     126:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0JPUF9BTExfMA__"><span class="b">CAP_BOP_ALL</span></a><span class="f">(</span><span class="b">dest</span><span class="f">,</span> <span class="b">a</span><span class="f">,</span> <span class="b">b</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">)</span><span class="f">;</span>
<a name="127" /><span class="Maybe">     127:</span>     <span class="m">return</span> <span class="b">dest</span><span class="f">;</span>
<a name="128" /><span class="Maybe">     128:</span> <span class="f">}</span>
<a name="129" /><span class="Maybe">     129:</span> 
<a name="130" /><span class="Maybe">     130:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_drop</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span>
<a name="131" /><span class="Maybe">     131:</span>                     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">drop</span><span class="f">)</span>
<a name="132" /><span class="Maybe">     132:</span> <span class="f">{</span>
<a name="133" /><span class="Maybe">     133:</span>     <span class="b">kernel_cap_t</span> <span class="b">dest</span><span class="f">;</span>
<a name="134" /><span class="Maybe">     134:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0JPUF9BTExfMA__"><span class="b">CAP_BOP_ALL</span></a><span class="f">(</span><span class="b">dest</span><span class="f">,</span> <span class="b">a</span><span class="f">,</span> <span class="b">drop</span><span class="f">,</span> <span class="f">&amp;</span><span class="f">~</span><span class="f">)</span><span class="f">;</span>
<a name="135" /><span class="Maybe">     135:</span>     <span class="m">return</span> <span class="b">dest</span><span class="f">;</span>
<a name="136" /><span class="Maybe">     136:</span> <span class="f">}</span>
<a name="137" /><span class="Maybe">     137:</span> 
<a name="138" /><span class="Maybe">     138:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_invert</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">c</span><span class="f">)</span>
<a name="139" /><span class="Maybe">     139:</span> <span class="f">{</span>
<a name="140" /><span class="Maybe">     140:</span>     <span class="b">kernel_cap_t</span> <span class="b">dest</span><span class="f">;</span>
<a name="141" /><span class="Maybe">     141:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX1VPUF9BTExfMA__"><span class="b">CAP_UOP_ALL</span></a><span class="f">(</span><span class="b">dest</span><span class="f">,</span> <span class="b">c</span><span class="f">,</span> <span class="f">~</span><span class="f">)</span><span class="f">;</span>
<a name="142" /><span class="Maybe">     142:</span>     <span class="m">return</span> <span class="b">dest</span><span class="f">;</span>
<a name="143" /><span class="Maybe">     143:</span> <span class="f">}</span>
<a name="144" /><span class="Maybe">     144:</span> 
<a name="145" /><span class="Maybe">     145:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">cap_isclear</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">)</span>
<a name="146" /><span class="Maybe">     146:</span> <span class="f">{</span>
<a name="147" /><span class="Maybe">     147:</span>     <span class="m">unsigned</span> <span class="b">__capi</span><span class="f">;</span>
<a name="148" /><span class="Maybe">     148:</span>     <a href="cpu.c_macros_ref.html#_Q0FQX0ZPUl9FQUNIX1UzMl8w"><span class="b">CAP_FOR_EACH_U32</span></a><span class="f">(</span><span class="b">__capi</span><span class="f">)</span> <span class="f">{</span>
<a name="149" /><span class="Maybe">     149:</span>         <span class="m">if</span> <span class="f">(</span><span class="b">a</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><span class="b">__capi</span><span class="f">]</span> <span class="f">!=</span> <span class="c">0</span><span class="f">)</span>
<a name="150" /><span class="Maybe">     150:</span>             <span class="m">return</span> <span class="c">0</span><span class="f">;</span>
<a name="151" /><span class="Maybe">     151:</span>     <span class="f">}</span>
<a name="152" /><span class="Maybe">     152:</span>     <span class="m">return</span> <span class="c">1</span><span class="f">;</span>
<a name="153" /><span class="Maybe">     153:</span> <span class="f">}</span>
<a name="154" /><span class="Maybe">     154:</span> 
<a name="155" /><span class="Maybe">     155:</span> <span class="k">/*</span>
<a name="156" /><span class="Maybe">     156:</span> <span class="k"> * Check if &quot;a&quot; is a subset of &quot;set&quot;.</span>
<a name="157" /><span class="Maybe">     157:</span> <span class="k"> * return 1 if ALL of the capabilities in &quot;a&quot; are also in &quot;set&quot;</span>
<a name="158" /><span class="Maybe">     158:</span> <span class="k"> *    cap_issubset(0101, 1111) will return 1</span>
<a name="159" /><span class="Maybe">     159:</span> <span class="k"> * return 0 if ANY of the capabilities in &quot;a&quot; are not in &quot;set&quot;</span>
<a name="160" /><span class="Maybe">     160:</span> <span class="k"> *    cap_issubset(1111, 0101) will return 0</span>
<a name="161" /><span class="Maybe">     161:</span> <span class="k"> */</span>
<a name="162" /><span class="Maybe">     162:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">cap_issubset</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span> <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">set</span><span class="f">)</span>
<a name="163" /><span class="Maybe">     163:</span> <span class="f">{</span>
<a name="164" /><span class="Maybe">     164:</span>     <span class="b">kernel_cap_t</span> <span class="b">dest</span><span class="f">;</span>
<a name="165" /><span class="Maybe">     165:</span>     <span class="b">dest</span> <span class="f">=</span> <span class="b">cap_drop</span><span class="f">(</span><span class="b">a</span><span class="f">,</span> <span class="b">set</span><span class="f">)</span><span class="f">;</span>
<a name="166" /><span class="Maybe">     166:</span>     <span class="m">return</span> <span class="b">cap_isclear</span><span class="f">(</span><span class="b">dest</span><span class="f">)</span><span class="f">;</span>
<a name="167" /><span class="Maybe">     167:</span> <span class="f">}</span>
<a name="168" /><span class="Maybe">     168:</span> 
<a name="169" /><span class="Maybe">     169:</span> <span class="k">/* Used to decide between falling back on the old suser() or fsuser(). */</span>
<a name="170" /><span class="Maybe">     170:</span> 
<a name="171" /><span class="Maybe">     171:</span> <span class="m">static</span> <span class="m">inline</span> <span class="m">int</span> <span class="b">cap_is_fs_cap</span><span class="f">(</span><span class="m">int</span> <span class="b">cap</span><span class="f">)</span>
<a name="172" /><span class="Maybe">     172:</span> <span class="f">{</span>
<a name="173" /><span class="Maybe">     173:</span>     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_fs_set</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX1NFVF8w"><span class="b">CAP_FS_SET</span></a><span class="f">;</span>
<a name="174" /><span class="Maybe">     174:</span>     <span class="m">return</span> <span class="f">!</span><span class="f">!</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX01BU0tfMA__"><span class="b">CAP_TO_MASK</span></a><span class="f">(</span><span class="b">cap</span><span class="f">)</span> <span class="f">&amp;</span> <span class="b">__cap_fs_set</span><span class="f">.</span><span class="b">cap</span><span class="f">[</span><a href="cpu.c_macros_ref.html#_Q0FQX1RPX0lOREVYXzA_"><span class="b">CAP_TO_INDEX</span></a><span class="f">(</span><span class="b">cap</span><span class="f">)</span><span class="f">]</span><span class="f">)</span><span class="f">;</span>
<a name="175" /><span class="Maybe">     175:</span> <span class="f">}</span>
<a name="176" /><span class="Maybe">     176:</span> 
<a name="177" /><span class="Maybe">     177:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_drop_fs_set</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">)</span>
<a name="178" /><span class="Maybe">     178:</span> <span class="f">{</span>
<a name="179" /><span class="Maybe">     179:</span>     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_fs_set</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX1NFVF8w"><span class="b">CAP_FS_SET</span></a><span class="f">;</span>
<a name="180" /><span class="Maybe">     180:</span>     <span class="m">return</span> <span class="b">cap_drop</span><span class="f">(</span><span class="b">a</span><span class="f">,</span> <span class="b">__cap_fs_set</span><span class="f">)</span><span class="f">;</span>
<a name="181" /><span class="Maybe">     181:</span> <span class="f">}</span>
<a name="182" /><span class="Maybe">     182:</span> 
<a name="183" /><span class="Maybe">     183:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_raise_fs_set</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span>
<a name="184" /><span class="Maybe">     184:</span>                         <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">permitted</span><span class="f">)</span>
<a name="185" /><span class="Maybe">     185:</span> <span class="f">{</span>
<a name="186" /><span class="Maybe">     186:</span>     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_fs_set</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Q0FQX0ZTX1NFVF8w"><span class="b">CAP_FS_SET</span></a><span class="f">;</span>
<a name="187" /><span class="Maybe">     187:</span>     <span class="m">return</span> <span class="b">cap_combine</span><span class="f">(</span><span class="b">a</span><span class="f">,</span>
<a name="188" /><span class="Maybe">     188:</span>                <span class="b">cap_intersect</span><span class="f">(</span><span class="b">permitted</span><span class="f">,</span> <span class="b">__cap_fs_set</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="189" /><span class="Maybe">     189:</span> <span class="f">}</span>
<a name="190" /><span class="Maybe">     190:</span> 
<a name="191" /><span class="Maybe">     191:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_drop_nfsd_set</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">)</span>
<a name="192" /><span class="Maybe">     192:</span> <span class="f">{</span>
<a name="193" /><span class="Maybe">     193:</span>     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_fs_set</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Q0FQX05GU0RfU0VUXzA_"><span class="b">CAP_NFSD_SET</span></a><span class="f">;</span>
<a name="194" /><span class="Maybe">     194:</span>     <span class="m">return</span> <span class="b">cap_drop</span><span class="f">(</span><span class="b">a</span><span class="f">,</span> <span class="b">__cap_fs_set</span><span class="f">)</span><span class="f">;</span>
<a name="195" /><span class="Maybe">     195:</span> <span class="f">}</span>
<a name="196" /><span class="Maybe">     196:</span> 
<a name="197" /><span class="Maybe">     197:</span> <span class="m">static</span> <span class="m">inline</span> <span class="b">kernel_cap_t</span> <span class="b">cap_raise_nfsd_set</span><span class="f">(</span><span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">a</span><span class="f">,</span>
<a name="198" /><span class="Maybe">     198:</span>                           <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">permitted</span><span class="f">)</span>
<a name="199" /><span class="Maybe">     199:</span> <span class="f">{</span>
<a name="200" /><span class="Maybe">     200:</span>     <span class="m">const</span> <span class="b">kernel_cap_t</span> <span class="b">__cap_nfsd_set</span> <span class="f">=</span> <a href="cpu.c_macros_ref.html#_Q0FQX05GU0RfU0VUXzA_"><span class="b">CAP_NFSD_SET</span></a><span class="f">;</span>
<a name="201" /><span class="Maybe">     201:</span>     <span class="m">return</span> <span class="b">cap_combine</span><span class="f">(</span><span class="b">a</span><span class="f">,</span>
<a name="202" /><span class="Maybe">     202:</span>                <span class="b">cap_intersect</span><span class="f">(</span><span class="b">permitted</span><span class="f">,</span> <span class="b">__cap_nfsd_set</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="203" /><span class="Maybe">     203:</span> <span class="f">}</span>
<a name="204" /><span class="Maybe">     204:</span> 
<a name="205" /><span class="Maybe">     205:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">has_capability</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="206" /><span class="Maybe">     206:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">has_ns_capability</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="207" /><span class="Maybe">     207:</span>                   <span class="m">struct</span> <span class="b">user_namespace</span> <span class="f">*</span><span class="b">ns</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="208" /><span class="Maybe">     208:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">has_capability_noaudit</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="209" /><span class="Maybe">     209:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">has_ns_capability_noaudit</span><span class="f">(</span><span class="m">struct</span> <span class="b">task_struct</span> <span class="f">*</span><span class="b">t</span><span class="f">,</span>
<a name="210" /><span class="Maybe">     210:</span>                       <span class="m">struct</span> <span class="b">user_namespace</span> <span class="f">*</span><span class="b">ns</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="211" /><span class="Maybe">     211:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">capable</span><span class="f">(</span><span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="212" /><span class="Maybe">     212:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">ns_capable</span><span class="f">(</span><span class="m">struct</span> <span class="b">user_namespace</span> <span class="f">*</span><span class="b">ns</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="213" /><span class="Maybe">     213:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">inode_capable</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">inode</span> <span class="f">*</span><span class="b">inode</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="214" /><span class="Maybe">     214:</span> <span class="m">extern</span> <span class="m">bool</span> <span class="b">file_ns_capable</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">file</span> <span class="f">*</span><span class="b">file</span><span class="f">,</span> <span class="m">struct</span> <span class="b">user_namespace</span> <span class="f">*</span><span class="b">ns</span><span class="f">,</span> <span class="m">int</span> <span class="b">cap</span><span class="f">)</span><span class="f">;</span>
<a name="215" /><span class="Maybe">     215:</span> 
<a name="216" /><span class="Maybe">     216:</span> <span class="k">/* audit system wants to get cap info from files as well */</span>
<a name="217" /><span class="Maybe">     217:</span> <span class="m">extern</span> <span class="m">int</span> <span class="b">get_vfs_caps_from_disk</span><span class="f">(</span><span class="m">const</span> <span class="m">struct</span> <span class="b">dentry</span> <span class="f">*</span><span class="b">dentry</span><span class="f">,</span> <span class="m">struct</span> <span class="b">cpu_vfs_cap_data</span> <span class="f">*</span><span class="b">cpu_caps</span><span class="f">)</span><span class="f">;</span>
<a name="218" /><span class="Maybe">     218:</span> 
<a name="219" /><span class="True">     219:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !_LINUX_CAPABILITY_H */</span>
<a name="220" /><span class="True">     220:</span> </pre>
  </body>
</html>
